
import csrf from '../img/csrf.png';

Cross-site request forgery, 跨站请求伪造。是指黑客引诱用户打开黑客设置的网站，在黑客的网站中，利用用户的登录状态发起跨站请求。

简单的身份验证只能保证请求发自某个用户的浏览器，却不能保证请求本身是用户自愿发出的。
目的：欺骗用户浏览器，让其以用户的名义运行操作
举个例子，用户通过表单发送请求到银行网站，银行网站获取请求参数后对用户账户做出更改。在用户没有退出银行网站情况下，访问了攻击网站，攻击网站中有一段跨域访问的代码，可能自动触发也可能点击提交按钮，访问的url正是银行网站接受表单的url。因为都来自于用户的浏览器端，银行将请求看作是用户发起的，所以对请求进行了处理，造成的结果就是用户的银行账户被攻击网站修改。

解决方法基本上都是增加攻击网站无法获取到的一些表单信息，比如增加图片验证码，可以杜绝csrf攻击，但是除了登陆注册之外，其他的地方都不适合放验证码，因为降低了网站易用性

<img src={csrf} />

## 防御措施

- 检查请求头中Referer字段（缺点：有被篡改的风险）  
- origin属性
通过XMLHttpRequest、Fetch发起的跨站请求或者Post方法发送请求时，都会带上origin,所以服务器可以优先判断Origin属性，再根据实际情况判断是否使用referer判断。
- 添加校验token
## 参考来源

[Web安全之CSRF攻击](https://helloworldcoding.com/blog/article/7)